#encoding=utf8
import os
import pandas as pd
from numpy import *

def load_dataset(filepath,sep='\t'):
	file = open(filepath)
	str_arr = [line.strip().split(sep) for line in file.readlines()]
	data_mat = [ list(map(float,line)) for line in str_arr]
	return mat(data_mat)

def repair_lostdata_for_avg(dataset):
	data_size = shape(dataset) # 取得数据集的行数和列数
	#忽略最后一列（标签值）
	for i in range(data_size[1]-1):
		#print(mean(dataset[nonzero(~isnan(dataset[:,i].A))[0],i]))
		'''
		isnan:所有值为nan的下标，加上~就是不为nan的值
		nonzero:不为零的值的下标
		mean：计算平均值,数组内所有值的平均值
		'''
		avg = mean(dataset[nonzero(~isnan(dataset[:,i].A))[0],i])
		dataset[nonzero(isnan(dataset[:,i].A))[0],i] = avg

	return dataset

def repair_lostdata_avg_pandas(dataset):
	df = pd.DataFrame(dataset)

	#计算每列的均值
	avgs = [ df[col].mean() for col in range(dataset.shape[1])]
	#把均值填充到每列的空缺位置
	new_dataset = [ list(df[i].fillna(avgs[i])) for i in range(len(avgs))]
	return mat(new_dataset)

	#前/后填充法：pad/fill 和 bfill/backfill
	#df.fillna(method='pad') 使用同一列空值位置的前一个值填充
	#df.fillna(method='backfill') 使用同一列空值位置的后一个值填充

	#丢弃不完整数据：axis=0按行丢弃,axis=1按列丢弃
	#df.dropna(axis=0)

if __name__ == '__main__':
 	filepath = r'../new_txt/dataset.data'
 	dataset = load_dataset(filepath,'    ')
 	new_dataset = repair_lostdata_avg_pandas(dataset)
 	print(new_dataset)